package com.nuanshui.heatedloan.credit.pay.behavior;

import com.aipg.common.AipgReq;
import com.aipg.payreq.Trans_Sum;
import com.aipg.rtreq.Trans;
import com.alibaba.fastjson.JSON;
import com.nuanshui.framework.security.DESC;
import com.nuanshui.framework.springContext.Environment;
import com.nuanshui.heatedloan.credit.constant.TonlyConstant;
import com.nuanshui.heatedloan.credit.pay.PayContext;
import com.nuanshui.heatedloan.credit.pay.PayRequest;
import com.nuanshui.heatedloan.credit.pay.TransRequestCode;
import com.nuanshui.heatedloan.credit.pay.annotation.PayBehaviorAttribute;
import com.nuanshui.heatedloan.credit.pay.constant.PayBehaviorType;
import com.nuanshui.heatedloan.credit.pay.constant.PayBizCode;
import com.nuanshui.heatedloan.credit.pay.utils.AllinPayUtil;
import com.nuanshui.heatedloan.middleware.async.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

/**
 * 准备交易数据
 */
@PayBehaviorAttribute(value= PayBehaviorType.PrepareTransBehavior,order=300)
public class PrepareTransBehavior extends PayBehavior {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public void internalInvoke(PayRequest request) {

        AllinPayUtil.logOrderPay(logger, request, "用户支付账号信息准备开始");

        Trans trans=new Trans();

        request.setTrxData(trans);

        if(request.getTransRequestCode()== TransRequestCode.TRX_CODE_SINGLE_PAY)
        {
            trans.setBUSINESS_CODE(PayBizCode.PAY_BIZ_CODE);
        }
        else if(request.getTransRequestCode()== TransRequestCode.TRX_CODE_REPAY)
        {
            trans.setBUSINESS_CODE(PayBizCode.REPAY_BIZ_CODE);
        }

        prepareTrans(trans);

        fillTrans(trans);

        AllinPayUtil.logOrderPay(logger, request, "用户支付账号信息准备结束:"+ JSON.toJSONString(trans));
    }

    private void prepareTrans(Trans trans) {
        //账号类型  不填默认为银行卡00 [可空]
        trans.setACCOUNT_TYPE(TonlyConstant.BANK_CARD);
        //账号属性   0私人，1公司。不填时，默认为私人0
        trans.setACCOUNT_PROP(TonlyConstant.PERSONAL_ACCOUNT);
        //人民币：CNY, 港元：HKD，美元：USD。不填时，默认为人民币
        trans.setCURRENCY(TonlyConstant.CNY);
        //开户证件类型  [可空]
        trans.setID_TYPE(TonlyConstant.CARD_TYPE);
        //分组清算标志  特殊商户使用，普通商户不要填   [可空]
        trans.setSETTGROUPFLAG("");
        //交易附言  填入网银的交易备注   [可空]
        trans.setSUMMARY("");
        //备注        [可空]
        trans.setREMARK("");
        //本交易结算户  结算到商户的账户，不需分别清算时不需填写  [可空]
        trans.setSETTACCT("");

        //提交时间
        trans.setSUBMIT_TIME(DateUtils.getDate("yyyyMMddHHmmss"));
    }

    private Trans fillTrans(Trans trans) {
        AipgReq aipgReq=PayContext.getContext().getAipgReq();
        PayRequest request=PayContext.getContext().getPayRequest();

        trans.setMERCHANT_ID(aipgReq.getINFO().getMERCHANT_ID());

        // 用户编号,开发人员可当作备注字段
        trans.setE_USER_CODE(request.getOrder().getUserId());
        //银行代码  存折必须填写
        trans.setBANK_CODE(request.getBankCard().getCardBankCode());
        //账号
        trans.setACCOUNT_NO(DESC.decrypt3DES(request.getBankCard().getMixCardNo()));
        //账号名称
        trans.setACCOUNT_NAME(request.getIdCard().getCustomerName());

        //金额  整数，单位分
        trans.setAMOUNT(request.getMoney()+"");
        if(!Environment.isRelease())
        {
            trans.setAMOUNT(request.getMoney()/100+"");
        }

        //trans.setAMOUNT(request.getOrder().getLoanAmount() + "");
        //证件id   [可空]
        trans.setID(DESC.decrypt3DES(request.getIdCard().getIdCard()));
        //联系方式   [可空]
        trans.setTEL(request.getBankCard().getMobileNo());
        //自定义用户号  商户自定义的用户号，开发人员可当作备注字段使用  [可空]
        trans.setCUST_USERID(request.getUserId());

        trans.setREMARK(request.getOrderNo().toString());

        return trans;
    }

//    private Trans fillTrans(Trans trans) {
//        AipgReq aipgReq=PayContext.getContext().getAipgReq();
//        PayRequest request=PayContext.getContext().getPayRequest();
//
//        trans.setMERCHANT_ID(aipgReq.getINFO().getMERCHANT_ID());
//
//        // 用户编号,开发人员可当作备注字段
//        trans.setE_USER_CODE(request.getOrder().getUserId());
//        //银行代码  存折必须填写
//        trans.setBANK_CODE("0104");
//        //账号
//        trans.setACCOUNT_NO("6013820800068188554");
//        //账号名称
//        trans.setACCOUNT_NAME("叶永青");
//
//        //金额  整数，单位分
//        trans.setAMOUNT("200000");
//
//        //证件id   [可空]
//        trans.setID("320683198011100010");
//        //联系方式   [可空]
//        trans.setTEL("13564600959");
//        //自定义用户号  商户自定义的用户号，开发人员可当作备注字段使用  [可空]
//        trans.setCUST_USERID(request.getUserId());
//
//        trans.setREMARK(request.getOrderNo().toString());
//
//        return trans;
//    }
}
